#include <iostream>
#include <vector>   //单端动态数组,无头删和头插，因为要时间复杂度为o（1）的

int main()
{
    std::vector<int>v;  //数组类型是可以修改的
/* 尾插法 */
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);

/* 尾删法 */
    v.pop_back();

/* 按位置插入 */
    auto ite = v.begin() + 1;   //随机迭代器,因为数组查找是o(1)
    v.insert(ite,99);           //按迭代器插入
    v.erase(v.begin() + 1);     //按迭代器删除
    for(auto ite = v.begin();ite != v.end();)
    {
        if(*ite == 2)
        {
            ite = v.erase(ite);
        }
        else
        {
            ite++;
        }
    }

/* 头尾迭代器*/
    //std::vector<int>::iterator ite = v.begin();  //首迭代器：指向容器的第一个元素
    auto ite = v.begin();   //用auto自动识别类型
    std::cout<<*ite<<std::endl;
    ite = v.end();  //尾迭代器：指向容器的最后一个元素的下一个
    std::cout<<*ite<<std::endl; //输出0；

/* 遍历输出 */
    //遍历时，从begin开始，再end前一个结束[b,e)
    for(auto ite = v.begin(); ite != v.end(); ite++)
    {
        std::cout<<*ite<<" ";
    }
    std::cout<<std::endl;

/* 清空容器 */
    v.clear();
/* 去数组的首地址，一般不要取 */
    v.data();

    // for(int i = 0; i < v.size(); i++)
    // {
    //     std::cout<<v[i]<<" ";
    // }
    // std::cout<<std::endl;

    return 0;
}